home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / tsptp.zip / RESULTS < prev    next >
Text File  |  1993-04-09  |  25KB  |  515 lines

  1. Benchmarking Pascal Compilers: TopSpeed v3.02 v Turbo v6.0
  2. ==========================================================
  3.  
  4. In response to messages on the BBS suggesting that TopSpeed Pascal may
  5. generate slower code than Turbo Pascal, I have prepared a number of standard
  6. benchmarks to test these claims.  Benchmarks need careful interpretation
  7. and the performance of a compiler in a particular benchmark does not
  8. necessarily imply anything about the performance in a real world application.
  9.  
  10. Most benchmarks are very small programs that test a single aspect of a
  11. compilers performance, typically in a very limited fashion.  Modern
  12. optimising compilers may perform very differently in large real world
  13. applications than in trivial benchmarks.
  14.  
  15. The following text presents the results of my benchmarks together with a
  16. brief description of the benchmark program and an interpretation of the
  17. results.  The benchmarks themselves are included with this paper.
  18.  
  19. The timing mechanism for these benchmarks is a little unusual and requires
  20. some explanation.  Each benchmark is run in a loop, this naturally incurrs
  21. some overhead which must be accounted for.  In order to calculate the
  22. overhead a loop which calls a Dummy procedure is executed for 1 second.
  23. The number of completed loops is recorded in NullLoops and the time taken is
  24. recorded in NullTime.  Then the actual benchmark is run in a loop which
  25. invokes the benchmark AND the Dummy procedure.  This loop is executed for
  26. approximately 1 minute.  The number of completed loops is recorded in
  27. BenchLoops and the time taken is recorded in BenchTime.  Now the loop
  28. overhead for the latter loop is calculated using the expression:
  29. LoopOverhead := (NullTime/NullLoops)*BenchLoops.  The result is subracted
  30. from BenchTime to give TotalTime, and LoopsPerSecond is calculated from
  31. this as BenchLoops/TotalTime.  Thus the greater the value of LoopsPerSecond
  32. the faster the benchmark.
  33.  
  34. NOTE: The NOx87 benchmarks were run on a 25MHz 386 with no coprocessor.  The
  35. Turbo Pascal REAL type uses a non-standard 6-byte representation, this is the
  36. only floating point type supported by the Turbo Emulator.  The TopSpeed
  37. Pascal REAL type uses an 8-byte representation, though the TopSpeed Emulator
  38. also supports 4 and 10-byte floating point types with 10 byte intermediate
  39. values.  All these types are designed for compatibility with the formats used
  40. by the Intel coprocessors.  Because of the difference in representation it is
  41. reasonable to expect TopSpeed Pascal floating point programs to acheive
  42. better precision at the cost of some speed.  Also the TopSpeed INTEGER type
  43. uses a 4-byte representation whereas Turbo Pascal uses a 2-byte
  44. representation.  The EMU and x87 benchmarks were run on a 20MHz 486DX.  You
  45. should be careful when comparing results from different machines.  For
  46. comparative purposes the benchmarks use the types MyReal and MyInt which are
  47. defined as follows:
  48.  
  49.                         TopSpeed            Turbo
  50.                         ========            =====
  51.  
  52. MyReal (EMU & NOx87)    REAL (8-byte)       REAL (6-byte)
  53. MyReal (x87)            REAL (8-byte)       DOUBLE (8-byte)
  54. MyInt                   INTEGER (4-byte)    LONGINT (4-byte)
  55.  
  56. x87 results are not shown for non-floating point benchmarks, instead the
  57. x87 collumn contains "N/A".
  58.  
  59. The Turbo Pascal programs were compiled from the command line using the
  60. following parameters:
  61.  
  62.  
  63. (EMU & NOx87)           /B /$A+ /$D- /$E+ /$N- /$G+ /$I- /$L- /$R- /$S- /$V-
  64. (x87)                   /B /$A+ /$D- /$E- /$N+ /$G+ /$I- /$L- /$R- /$S- /$V-
  65.  
  66.  
  67. The TopSpeed Pascal benchmarks were compiled using the following .PR files:
  68.  
  69.  
  70. (EMU & NOx87)           #system auto exe
  71.                         #model small
  72.                         #pragma optimize(cpu=>286)
  73.  
  74.                         #compile %main
  75.                         #link %prjname
  76.  
  77. (x87)                   #system auto exe
  78.                         #model small
  79.                         #pragma optimize(cpu=>286, copro=>287)
  80.  
  81.                         #compile %main
  82.                         #link %prjname
  83.  
  84. Both compilers wer instructed to produce code optimised for the 286 with
  85. no run-time checks, optimised for speed.
  86.  
  87.  
  88.  
  89. Ackermann Benchmark
  90. ===================
  91.  
  92. The Ackermann Benchmark is a simple recursive benchmark for function call
  93. overhead.  TopSpeed Pascal passes parameters in registers, unlike most other
  94. compilers, and can be expected to outperform other compilers in this
  95. benchmark.
  96.  
  97.                     TopSpeed                    Turbo
  98.                     NOx87   EMU     x87         NOx87   EMU     x87
  99.                     ===================         ===================
  100.  
  101. NullTime         :  1.04    1.05    N/A         1.04    1.04    N/A
  102. BenchTime        :  60.15   60.96               61.30   60.58
  103. Null loops       :  3276    2506                3648    2674
  104. Bench loops      :  63      57                  45      35
  105. LoopOverhead     :  0.02    0.02                0.01    0.01
  106. TotalTime        :  60.13   60.94               61.29   60.57
  107. Loops per second :  1.05    0.94                0.73    0.58
  108.  
  109. TopSpeed Pascal comes out as the clear winner in this benchmark illustrating
  110. that the register parameter passing can have a marked effect.  The effect is
  111. greatest where there are a large number of calls to small functions or
  112. procedures taking a number of parameters.
  113.  
  114.  
  115. Dhrystone Benchmark (March 84), Version Pascal / 2
  116. ==================================================
  117.  
  118. This is a translation of the classic synthetic benchmark by Reinhold Weicker.
  119. The Dhrystone was written to contain a sequence of statements of different
  120. types that would closely match the proportions of these statements found in
  121. a large sample of real programs.  It is generally thought that this benchmark
  122. should provide a good indication of a compilers performance in real world
  123. applications.  However many modern optimising compilers have been written to
  124. do well in benchmarks such as the Dhrystone and so give misleading results.
  125. On the other hand careful analysis of the resulting code can reveal a
  126. compilers weaknesses and strengths.  There are no floating point expressions
  127. in the dhrystone making it a good test of the code generation capabilities of
  128. the compiler.  The dhrystone is particularly sensitive to string or array
  129. handling optimisations.
  130.  
  131.                     TopSpeed                    Turbo
  132.                     NOx87   EMU     x87         NOx87   EMU     x87
  133.                     ===================         ===================
  134.  
  135. NullTime         :  1.04    1.05    N/A         1.04    1.05    N/A
  136. BenchTime        :  60.03   60.03               60.03   60.03
  137. Null loops       :  3469    2569                3696    2746
  138. Bench loops      :  26653   18518               14654   13304
  139. LoopOverhead     :  7.99    7.57                4.12    5.09
  140. TotalTime        :  52.04   52.46               55.91   54.94
  141. Loops per second :  512.17  352.98              262.12  242.14
  142.  
  143. TopSpeed Pascal performs almost twice as many dhrystone loops as Turbo.
  144. This suggests that the optimisation performed by TopSpeed Pascal is giving
  145. it an edge.
  146.  
  147.  
  148. FBench Benchmark
  149. ================
  150.  
  151. This benchmark uses a complete optical ray-tracing algorithm and provides a
  152. good indication of a compilers floating point performance and accuracy.  The
  153. benchmark can be very sensitive to the efficiency of the trigonometric
  154. functions in the run-time library.  The benchmark is also very sensitive to
  155. errors in the calculations, though these results aren't displayed here
  156. since both compilers fell within the tolerances of the benchmark.
  157.  
  158.  
  159.                     TopSpeed                    Turbo
  160.                     NOx87   EMU     x87         NOx87   EMU     x87
  161.                     ===================         ===================
  162.  
  163. NullTime         :  1.04    1.04    1.04        1.05    1.04    1.04
  164. BenchTime        :  60.09   60.03   60.04       60.03   60.03   60.03
  165. Null loops       :  3346    2519    2518        3665    2673    2757
  166. Bench loops      :  383     15375   15997       1159    1280    8538
  167. LoopOverhead     :  0.12    6.35    6.61        0.33    0.50    3.22
  168. TotalTime        :  59.97   53.68   53.43       59.70   59.53   56.81
  169. Loops per second :  6.39    286.41  299.39      19.41   21.50   150.29
  170.  
  171. Turbo Pascal does exceptionally well in this benchmark where the emulator is
  172. used.  This is probably due to fact that Turbo Pascal uses a 6-byte
  173. representation for REALs whereas TopSpeed Pascal uses an 8-byte
  174. representation with a 10-byte internal representation within the emulator.
  175. However TopSpeed Pascal does very much better when a coprocessor is present.
  176. TopSpeed Pascal drives the chip in 'open mode' which tends to result in
  177. exceptionally fast floating point code.  NOTE: Turbo Pascal is still using
  178. it's internal routines in EMU mode, rather than using the chip.  This may
  179. well be my fault, although it may just be failing to detect the onboard
  180. coprocessor.
  181.  
  182.  
  183. Fibonacci Benchmark
  184. ===================
  185.  
  186. The Fibonnaci benchmark is similar to the Ackermann benchmark, it is a highly
  187. recursive benchmark useful for testing function call overhead.
  188.  
  189.                     TopSpeed                    Turbo
  190.                     NOx87   EMU     x87         NOx87   EMU     x87
  191.                     ===================         ===================
  192.  
  193. NullTime         :  1.04    1.04    N/A         1.04    1.04    N/A
  194. BenchTime        :  60.20   61.85               60.64   60.25
  195. Null loops       :  3377    2480                3778    2637
  196. Bench loops      :  24      24                  21      20
  197. LoopOverhead     :  0.01    0.01                0.01    0.01
  198. TotalTime        :  60.19   61.84               60.63   60.24
  199. Loops per second :  0.40    0.39                0.35    0.33
  200.  
  201. TopSpeed Pascal comes out as the clear winner in this benchmark illustrating
  202. that the register parameter passing can have a marked effect.  The effect is
  203. greatest where there are a large number of calls to small functions or
  204. procedures taking a number of parameters.
  205.  
  206.  
  207. Float Benchmark
  208. ===============
  209.  
  210. The Float Benchmark is a trivial floating point benchmark.  This benchmark
  211. has been popular for benchmarking C compilers and often gives some
  212. indication of the efficiency of floating point expressions.  However the
  213. benchmark is prone to being optimised almost out of existence by a clever
  214. optimiser.  It is worth bearing in mind that trivial benchmarks can be prone
  215. to being optimised out of existence, but real world applications don't
  216. contain code of this nature unless they are poorly written.  A compiler that
  217. is clever enough to spot these cases is not necessarily better on a larger
  218. scale.  Many compiler implementors would rather write a code generator that
  219. devotes its efforts to performing useful optimisations on realistic code
  220. than correcting a programs design flaws.
  221.  
  222.                     TopSpeed                    Turbo
  223.                     NOx87   EMU     x87         NOx87   EMU     x87
  224.                     ===================         ===================
  225.  
  226. NullTime         :  1.05    1.04    1.05        1.04    1.05    1.05
  227. BenchTime        :  66.24   60.09   60.03       66.46   61.90   60.36
  228. Null loops       :  3321    2522    2472        3724    2695    2778
  229. Bench loops      :  9       342     352         8       8       133
  230. LoopOverhead     :  0.00    0.14    0.15        0.00    0.00    0.05
  231. TotalTime        :  66.24   59.95   59.88       66.46   61.90   60.31
  232. Loops per second :  0.14    5.70    5.88        0.12    0.13    2.21
  233.  
  234.  
  235. TopSpeed demonstrates a slight advantage in this benchmark under the
  236. emulator, suggesting a more efficient handling of floating point expressions
  237. despite the larger representation.  When the coprocessor is in use TopSpeeds
  238. advantage doubles.
  239.  
  240.  
  241. Gamm Benchmark
  242. ==============
  243.  
  244. The GAMM benchmark is a floating point benchmark that provides an indication
  245. to the efficiency of floating point expressions.  Unlike the Float benchmark
  246. it is non-trivial and not subject to over-optimisation.
  247.  
  248.                     TopSpeed                    Turbo
  249.                     NOx87   EMU     x87         NOx87   EMU     x87
  250.                     ===================         ===================
  251.  
  252. NullTime         :  1.04    1.04    1.04        1.04    1.04    1.05
  253. BenchTime        :  60.15   60.03   60.04       60.04   60.03   60.03
  254. Null loops       :  3365    2547    2577        3800    2752    2737
  255. Bench loops      :  192     10690   9031        959     1084    5928
  256. LoopOverhead     :  0.06    4.36    3.64        0.26    0.41    2.27
  257. TotalTime        :  60.09   55.67   56.40       59.78   59.62   57.76
  258. Loops per second :  3.20    192.04  160.14      16.04   18.18   102.64
  259.  
  260. Turbo Pascal comes out the winner by a mile in this one under the emulator.
  261. When the coprocessor is in use TopSpeed Pascal is the clear winner. This
  262. benchmark again suggests that Turbo Pascal's internal floating point
  263. representation gives it a clear advantage.
  264.  
  265.  
  266. IntMath Benchmark
  267. =================
  268.  
  269. The IntMath benchmark is a trivial benchmark that illustrates the efficiency
  270. of integer expressions.  It is unlikely to be over-optimised and so should
  271. provide a pretty good idea of the compilers capabilities in a very particular
  272. area.
  273.  
  274.                     TopSpeed                    Turbo
  275.                     NOx87   EMU     x87         NOx87   EMU     x87
  276.                     ===================         ===================
  277.  
  278. NullTime         :  1.04    1.04    N/A         1.04    1.05    N/A
  279. BenchTime        :  60.09   60.04               61.74   61.02
  280. Null loops       :  3384    2505                3736    2697
  281. Bench loops      :  809     846                 30      46
  282. LoopOverhead     :  0.25    0.35                0.01    0.02
  283. TotalTime        :  59.84   59.69               61.73   61.00
  284. Loops per second :  13.52   14.17               0.49    0.75
  285.  
  286. Turbo Pascal executes this benchmark extremely slowly, suggesting thet
  287. TopSpeed Pascals optimisation is having a great effect.  Bear in mind
  288. however that TopSpeed Pascal is using its natural INTEGER (4-byte) type
  289. whereas Turbo Pascal is using LONGINTs (4-byte).  The 4-byte representation
  290. is not as efficient as Turbo Pascals 2-byte INTEGER but it is necessary to
  291. use it for a fair comparison with TopSpeed.
  292.  
  293.  
  294. RealMath Benchmark
  295. ==================
  296.  
  297. The RealMath banchmark is a trivial benchmark that illustrates the efficiency
  298. of floating point expressions.  It is unlikely to be over-optimised and so
  299. should provide a pretty good idea of the compilers capabilities in a very
  300. particular area.
  301.  
  302.                     TopSpeed                    Turbo
  303.                     NOx87   EMU     x87         NOx87   EMU     x87
  304.                     ===================         ===================
  305.  
  306. NullTime         : 1.05     1.04    1.04        1.05    1.04    1.04
  307. BenchTime        : 60.03    60.04   60.03       60.03   60.15   60.04
  308. Null loops       : 3417     2510    2465        3731    2774    3779
  309. Bench loops      : 580      31335   32934       404     441     7654
  310. LoopOverhead     : 0.18     12.98   13.90       0.11    0.17    2.11
  311. TotalTime        : 59.85    47.06   46.13       59.92   59.98   57.93
  312. Loops per second : 9.69     665.90  713.86      6.74    7.35    132.12
  313.  
  314. TopSpeed Pascal outperforms Tubo in this benchmark, this result appears to
  315. contradict the result obtained from the GAMM.  
  316.  
  317.  
  318. Savage Benchmark
  319. ================
  320.  
  321. The Savage Benchmark illustrates the efficiency of the compilers
  322. trigonometric functions.
  323.  
  324.                     TopSpeed                    Turbo
  325.                     NOx87   EMU     x87         NOx87   EMU     x87
  326.                     ===================         ===================
  327.  
  328. NullTime         :  1.04    1.05    1.04        1.05    1.04    1.04
  329. BenchTime        :  61.30   60.25   60.03       64.53   63.71   60.42
  330. Null loops       :  3419    2467    2555        3759    2717    3817
  331. Bench loops      :  4       183     188         10      11      76
  332. LoopOverhead     :  0.00    0.08    0.08        0.00    0.00    0.02
  333. TotalTime        :  61.30   60.17   59.95       64.53   63.71   60.40
  334. Loops per second :  0.07    3.04    3.14        0.15    0.17    1.26
  335.  
  336. Turbo Pascal does well in this benchmark under the emulator, again suggesting 
  337. that the non-standard 6-byte REALs are giving it an edge.  Again TopSpeed 
  338. wins under the coprocessor.
  339.  
  340.  
  341. Sieve Benchmark
  342. ===============
  343.  
  344. The Sieve is a classic benchmark that illustrates the efficiency of array
  345. indexing and integer expressions.
  346.  
  347.                     TopSpeed                    Turbo
  348.                     NOx87   EMU     x87         NOx87   EMU     x87
  349.                     ===================         ===================
  350.  
  351. NullTime         :  1.04    1.05    N/A         1.05    1.05    N/A
  352. BenchTime        :  60.04   60.03               60.09   60.03
  353. Null loops       :  3308    2514                3614    2775
  354. Bench loops      :  960     1206                422     467
  355. LoopOverhead     :  0.30    0.50                0.12    0.18
  356. TotalTime        :  59.74   59.53               59.97   59.85
  357. Loops per second :  16.07   20.26               7.04    7.80
  358.  
  359. TopSpeed Pascal does extremely well in this which may suggest that TopSpeed's
  360. 4-byte INTEGER expressions are more efficient than Turbo's 4-byte LONGINTs.
  361.  
  362.  
  363. Store Benchmark
  364. ===============
  365.  
  366. The Store Benchmark is a trivial test of the efficiency of a Pascal
  367. implementations file IO.  This can be an extremely misleading benchmark, it
  368. may be affected by the form of buffering used, if any, also I/O checking
  369. of various forms.
  370.  
  371.                     TopSpeed                    Turbo
  372.                     NOx87   EMU     x87         NOx87   EMU     x87
  373.                     ===================         ===================
  374.  
  375. NullTime         :  1.04    1.04    N/A         1.04    1.04    N/A
  376. BenchTime        :  60.75   60.20               60.20   60.31
  377. Null loops       :  3407    2602                3712    3862
  378. Bench loops      :  40      34                  69      59
  379. LoopOverhead     :  0.01    0.01                0.02    0.02
  380. TotalTime        :  60.74   60.19               60.18   60.29
  381. Loops per second :  0.66    0.56                1.15    0.98
  382.  
  383. Turbo Pascal comes out better in this benchmark, however this might be due
  384. to buffering, checks the IO routines perform (or don't), and whether the
  385. IO routines are designed for typed files.  I wasn't able to run the Turbo
  386. Benchmark on the 486, for some reason it never terminated.
  387.  
  388.  
  389. TrigLog Benchmark
  390. =================
  391.  
  392. The TrigLog benchmark tests the efficiency of a compilers trigonometric and
  393. logarithmic floating point functions.
  394.  
  395.                     TopSpeed                    Turbo
  396.                     NOx87   EMU     x87         NOx87   EMU     x87
  397.                     ===================         ===================
  398.  
  399. NullTime         : 1.05     1.05    1.05        1.04    1.05    1.04
  400. BenchTime        : 60.30    60.03   60.09       60.31   60.75   60.03
  401. Null loops       : 3430     2479    2467        3716    2752    3703
  402. Bench loops      : 14       658     670         39      44      241
  403. LoopOverhead     : 0.00     0.28    0.29        0.01    0.02    0.07
  404. TotalTime        : 60.30    59.75   59.80       60.30   60.73   59.96
  405. Loops per second : 0.23     11.01   11.20       0.65    0.72    4.02
  406.  
  407. Turbo Pascal does well in this benchmark, again suggesting that the 
  408. non-standard 6-byte REALs are giving it an edge.  Again TopSpeed Pascal wins 
  409. under the coprocessor.
  410.  
  411.  
  412. Whetstone Benchmark
  413. ===================
  414.  
  415. The Whetstone Benchmark is a synthetic benchmark for testing floating point
  416. performance.  It contains a number of weighted floating point expressions
  417. and operations on arrays and records containing REALs.  The Whetstone can
  418. give an indication of an applications performance in real-world floating-
  419. point intensive applications.
  420.  
  421.                     TopSpeed                    Turbo
  422.                     NOx87   EMU     x87         NOx87   EMU     x87
  423.                     ===================         ===================
  424.  
  425. NullTime         :  1.05    1.05    1.04        1.04    1.04    1.05
  426. BenchTime        :  72.72   60.36   60.14       61.96   61.52   60.09
  427. Null loops       :  3399    2391    2560        3739    2780    4020
  428. Bench loops      :  5       148     167         13      14      82
  429. LoopOverhead     :  0.00    0.06    0.07        0.00    0.01    0.02
  430. TotalTime        :  72.72   60.30   60.07       61.96   61.51   60.07
  431. Loops per second :  0.07    2.45    2.78        0.21    0.23    1.37
  432.  
  433. Turbo Pascal does well in this benchmark, again suggesting that the 6-byte 
  434. REALs are giving it an edge.  TopSpeed runs twice as fast under the 
  435. coprocessor though.
  436.  
  437.  
  438. EXECUTABLE SIZE
  439. ===============
  440.  
  441. One measure of a compilers abilities that is often quoted is the size of
  442. the resulting executable.  While small executables are desirable, a small
  443. executable does not always indicate a better compiler.  With small programs
  444. such as these benchmarks it is conceivable that a large percentage of the
  445. programs size is made up of routines from the run-time library.  These
  446. routines may have been implemented differently for each compiler because
  447. each vendor may have slightly different goals.  For example, implementing
  448. a Pascal run-time library for ISO conformance may result in a lager IO
  449. library than a simple DOS IO interface.  For this reason you shouldn't
  450. assume that if a compiler generates a smaller executable from a small
  451. source file that it will generate a smaller executable for huge source
  452. files.  The larger the amount of source code the more the size is reliant
  453. on the efficiency of the compiler and linker.  Furthermore some libraries
  454. are implemented largely in assembler, whilst others are implemented in a
  455. high level language.  This often has some size penalty particularly in
  456. small programs.
  457.  
  458.  
  459.                     TopSpeed            Turbo
  460.                     ========            =====
  461.  
  462. ackerman.exe        19743                6160
  463. dhry.exe            21274                8608
  464. fbench.exe          23700               11632
  465. fibonacc.exe        19649                5824
  466. float.exe           19647                6288
  467. gamm.exe            20991                8112
  468. imath.exe           19633                5984
  469. rmath.exe           19634                5856
  470. savage.exe          20436                7072
  471. sieve.exe           19691                6096
  472. store.exe           22353                6416
  473. tmath.exe           20113                6992
  474. tscrn.exe           19671                5792
  475. whet.exe            22979               10688
  476. whetchk.exe         21395               10224
  477.  
  478.  
  479.  
  480.  
  481. CONCLUSION:
  482. ===========
  483.  
  484. These benchmarks illustrate 3 advantages that Turbo Pascal has over TopSpeed 
  485. Pascal: the non-standard 6-byte REALs offer a performance advantage on 
  486. machines which do not have a coprocessor and non-486DX machines; for small 
  487. programs Turbo Pascal produces smaller programs; simple file IO appears to be 
  488. faster.  However TopSpeed Pascal uses standard floating point representations 
  489. that match those used by the coprocessor.  There are no restrictions as to 
  490. which floating point representation you may use in your TopSpeed Pascal 
  491. program.  The TopSpeed emulator correctly uses x87 code when run on a 486DX.  
  492. If you have a machine with a coprocessor, floating point programs may run up 
  493. to 5 times faster with TopSpeed Pascal (See RealMath).  There are a number of 
  494. ways of controlling file IO in order to speed up operations.  Although for 
  495. small programs TopSpeed Pascal produces larger executables than Turbo, this 
  496. is not always the case.  We have had reports of programs larger than 400K 
  497. under Turbo shrinking to 250K under TopSpeed!  This suggests that the 
  498. overhead is introduced by the run-time library.
  499.  
  500. Turbo Pascal's apparent advantages are short lived.  Most people are using 
  501. larger machines now and applications are growing.  The size difference for 
  502. small programs is going to be of little concern to most users and developers, 
  503. however program shrinkage for larger applications is still an issue.  Most 
  504. people running heavily numeric applications own a machine with a coprocessor.
  505.  
  506. I may be biased, but I think that what little information one can safely 
  507. gleen from these benchmarks shows TopSpeed Pascal to be the compiler of 
  508. choice for most serious developers.  If anybody wishes to provide 
  509. substantiated statistics from real world applications which show Turbo Pascal 
  510. against TopSpeed Pascal or Modula-2, I'd be happy to include them in this 
  511. paper.
  512.  
  513.  
  514. Sean Wilson, Clarion Software   11 August 1992
  515.